package com.qf.dao;

import com.qf.pojo.User;
import com.qf.pojo.UserInfo;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

/**
 * MyBatis映射文件resultType表示查询封装
 * 1查询结果是一个单行单列，映射文件中resultType值是属性类型
 * 2结果集是一条数据（一行记录）
 *      2.1可以将数据封装到pojo实体，映射文件的resultType值是破击的全限定名（包名+类名）别名
 *          此时要求查询结果与数据库中字段名与实体类中属性名保持一致。
 *      2.2可以将一条数据封装到Map集合中，映射文件的resultType值是Map集合（别名Map）
 *          此时查询结果 字段名 map.key 字段值 map.value
 * 3结果集是多行多列数据
 *      3.1将多条数据封装至List<pojo>中，映射文件的resultType值是pojo的全限定名（包名+类名）别名
 *      3.2将多条数据封装至List<Map>中，映射文件的resultType值是Map（别名Map）
 *
 */
public interface UserDao {
    /**
     * 查询总数据量
     * @return
     */
    Long selectTotal();

    /**
     * 根据id查找用户
     * @param id
     * @return
     */
    User selectById(int id);//这是因为使用了mybatisX插件，在整个项目中有其他模块，
    // 与其他模块里实体类重名了，导致mybatisX插件无法识别 不影响结果

    /**
     * 查询实体类中名与值封装到Map集合
     * @param name
     * @return
     */
    @MapKey("name") //去掉也可以，但会有红线，但不影响结果，是mybatis X的原因
    Map selectByName(String name);

    /**
     * 查询所有用户
     * @return
     */
    List<User> selectAll();

    /**
     * 查询所有用户
     * @return
     */
    List<Map> findAll();

    /**
     * 查询所有用户
     * @return
     */
    List<UserInfo> findAllUserInfo();
}
